home *** CD-ROM | disk | FTP | other *** search
- package java.awt;
-
- import java.awt.EventFilter.FilterAction;
- import java.awt.event.MouseEvent;
- import java.lang.reflect.Method;
- import java.security.AccessController;
- import java.util.Vector;
- import sun.awt.AWTAutoShutdown;
- import sun.awt.DebugHelper;
- import sun.awt.SunToolkit;
- import sun.awt.dnd.SunDragSourceContextPeer;
- import sun.security.action.GetPropertyAction;
-
- class EventDispatchThread extends Thread {
- private static final DebugHelper dbg = DebugHelper.create(EventDispatchThread.class);
- private EventQueue theQueue;
- private boolean doDispatch = true;
- private static final int ANY_EVENT = -1;
- private Vector<EventFilter> eventFilters = new Vector();
- private int modalFiltersCount = 0;
- private static final String handlerPropName = "sun.awt.exception.handler";
- private static String handlerClassName = null;
- private static String NO_HANDLER = new String();
-
- EventDispatchThread(ThreadGroup var1, String var2, EventQueue var3) {
- super(var1, var2);
- this.theQueue = var3;
- }
-
- void stopDispatchingImpl(boolean var1) {
- StopDispatchEvent var2 = new StopDispatchEvent(this);
- if (Thread.currentThread() != this) {
- this.theQueue.postEventPrivate(var2);
- if (var1) {
- try {
- this.join();
- } catch (InterruptedException var6) {
- }
- }
- } else {
- var2.dispatch();
- }
-
- synchronized(this.theQueue) {
- if (this.theQueue.getDispatchThread() == this) {
- this.theQueue.detachDispatchThread();
- }
-
- }
- }
-
- public void stopDispatching() {
- this.stopDispatchingImpl(true);
- }
-
- public void stopDispatchingLater() {
- this.stopDispatchingImpl(false);
- }
-
- public void run() {
- try {
- this.pumpEvents(new 1(this));
- } finally {
- synchronized(this.theQueue) {
- if (this.theQueue.getDispatchThread() == this) {
- this.theQueue.detachDispatchThread();
- }
-
- if (this.theQueue.peekEvent() != null || !SunToolkit.isPostEventQueueEmpty()) {
- this.theQueue.initDispatchThread();
- }
-
- AWTAutoShutdown.getInstance().notifyThreadFree(this);
- }
- }
-
- }
-
- void pumpEvents(Conditional var1) {
- this.pumpEvents(-1, var1);
- }
-
- void pumpEventsForHierarchy(Conditional var1, Component var2) {
- this.pumpEventsForHierarchy(-1, var1, var2);
- }
-
- void pumpEvents(int var1, Conditional var2) {
- this.pumpEventsForHierarchy(var1, var2, (Component)null);
- }
-
- void pumpEventsForHierarchy(int var1, Conditional var2, Component var3) {
- this.pumpEventsForFilter(var1, var2, new HierarchyEventFilter(var3));
- }
-
- void pumpEventsForFilter(Conditional var1, EventFilter var2) {
- this.pumpEventsForFilter(-1, var1, var2);
- }
-
- void pumpEventsForFilter(int var1, Conditional var2, EventFilter var3) {
- this.addEventFilter(var3);
-
- while(this.doDispatch && var2.evaluate()) {
- if (this.isInterrupted() || !this.pumpOneEventForFilters(var1)) {
- this.doDispatch = false;
- }
- }
-
- this.removeEventFilter(var3);
- }
-
- void addEventFilter(EventFilter var1) {
- synchronized(this.eventFilters) {
- if (!this.eventFilters.contains(var1)) {
- if (var1 instanceof ModalEventFilter) {
- ModalEventFilter var3 = (ModalEventFilter)var1;
- int var4 = 0;
-
- for(var4 = 0; var4 < this.eventFilters.size(); ++var4) {
- EventFilter var5 = (EventFilter)this.eventFilters.get(var4);
- if (var5 instanceof ModalEventFilter) {
- ModalEventFilter var6 = (ModalEventFilter)var5;
- if (var6.compareTo(var3) > 0) {
- break;
- }
- }
- }
-
- this.eventFilters.add(var4, var1);
- ++this.modalFiltersCount;
- } else {
- this.eventFilters.add(var1);
- }
- }
-
- }
- }
-
- void removeEventFilter(EventFilter var1) {
- synchronized(this.eventFilters) {
- if (this.eventFilters.contains(var1)) {
- if (var1 instanceof ModalEventFilter) {
- --this.modalFiltersCount;
- }
-
- this.eventFilters.remove(var1);
- }
-
- }
- }
-
- static boolean checkMouseEventForModalJInternalFrame(MouseEvent var0, Component var1) {
- if (Component.isInstanceOf(var1, "javax.swing.JInternalFrame")) {
- Container var2;
- synchronized(var1.getTreeLock()) {
- var2 = ((Container)var1).getHeavyweightContainer();
- }
-
- if (var0.getSource() == var2) {
- return true;
- }
- }
-
- return false;
- }
-
- boolean pumpOneEventForFilters(int var1) {
- try {
- AWTEvent var2;
- boolean var14;
- do {
- var2 = var1 == -1 ? this.theQueue.getNextEvent() : this.theQueue.getNextEvent(var1);
- var14 = true;
- synchronized(this.eventFilters) {
- for(int var5 = this.eventFilters.size() - 1; var5 >= 0; --var5) {
- EventFilter var6 = (EventFilter)this.eventFilters.get(var5);
- EventFilter.FilterAction var7 = var6.acceptEvent(var2);
- if (var7 == FilterAction.REJECT) {
- var14 = false;
- break;
- }
-
- if (var7 == FilterAction.ACCEPT_IMMEDIATELY) {
- break;
- }
- }
- }
-
- var14 = var14 && SunDragSourceContextPeer.checkEvent(var2);
- if (!var14) {
- var2.consume();
- }
- } while(!var14);
-
- DebugHelper var10000 = dbg;
- this.theQueue.dispatchEvent(var2);
- return true;
- } catch (ThreadDeath var10) {
- return false;
- } catch (InterruptedException var11) {
- return false;
- } catch (RuntimeException var12) {
- this.processException(var12, this.modalFiltersCount > 0);
- } catch (Error var13) {
- this.processException(var13, this.modalFiltersCount > 0);
- }
-
- return true;
- }
-
- private void processException(Throwable var1, boolean var2) {
- if (!this.handleException(var1)) {
- if (var2) {
- System.err.println("Exception occurred during event dispatching:");
- var1.printStackTrace();
- } else {
- if (var1 instanceof RuntimeException) {
- throw (RuntimeException)var1;
- }
-
- if (var1 instanceof Error) {
- throw (Error)var1;
- }
- }
- }
-
- }
-
- private boolean handleException(Throwable var1) {
- try {
- if (handlerClassName == NO_HANDLER) {
- return false;
- } else {
- if (handlerClassName == null) {
- handlerClassName = (String)AccessController.doPrivileged(new GetPropertyAction("sun.awt.exception.handler"));
- if (handlerClassName == null) {
- handlerClassName = NO_HANDLER;
- return false;
- }
- }
-
- Method var2;
- Object var3;
- try {
- ClassLoader var4 = Thread.currentThread().getContextClassLoader();
- Class var5 = Class.forName(handlerClassName, true, var4);
- var2 = var5.getMethod("handle", Throwable.class);
- var3 = var5.newInstance();
- } catch (Throwable var6) {
- handlerClassName = NO_HANDLER;
- return false;
- }
-
- var2.invoke(var3, var1);
- return true;
- }
- } catch (Throwable var7) {
- return false;
- }
- }
-
- boolean isDispatching(EventQueue var1) {
- return this.theQueue.equals(var1);
- }
-
- EventQueue getEventQueue() {
- return this.theQueue;
- }
-
- // $FF: synthetic method
- static boolean access$002(EventDispatchThread var0, boolean var1) {
- return var0.doDispatch = var1;
- }
- }
-